/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cda.pager;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 * Classe permettant de gérer la base de données joueur. Cette base de données<br>
 * contient les infos relatives aux joueurs inscrits.
 * 
 * @author Shyzkanza
 */
public class ClientBDDMemo {
    private Document document;
    private Element racine;
   

    /**
     * Fonction permettant d'ouvrir le fichier. Elle initialise la variable
     * document avec le fichier XML complet et racine avec l'element racine du
     * document XML.
     * 
     * @author Jessy Bonnotte
     */
    private void Ouverture(String nomDoc){
        SAXBuilder sxb = new SAXBuilder();
        try{
            document = sxb.build(new File("/sdcard/cda.memo/"+nomDoc+".xml"));
        }catch (Exception e){
            System.err.println(e.toString());
        }
        racine = document.getRootElement();
    }

    /**
     * Enregistre le fichier XML.
     * 
     * @author Jessy Bonnotte
     */
    private void Enregistre(String nomDoc){
        try{
            XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
            sortie.output(document, new FileOutputStream("/sdcard/cda.memo/"+nomDoc+".xml"));
        }catch (java.io.IOException e){
            System.err.println(e.toString());
        }
    }
    
    /**
     * Fonction permettant d'ajouter une categorie dans la base de données. Elle prend en parametre le nom de la cat�gorie. 
     * Le numero de categorie est auto-incremente.
     * 
     * @author Jessy Bonnotte
     * 
     * @param nomCat nom de la cat�gorie a ajouter dans la base
     * 
     * @return {@code String} contenant le résultat de l'opération
     */
    public boolean addCategorie(String nomCat){
        Ouverture("Categorie");       
        String nb;
        Element temp = null;
        
        if(racine.getChildren().isEmpty()){    
            nb = "1";
        }else{
            List element = racine.getChildren("categorie");
            temp = (Element)element.get(element.size()-1);
            
            nb = String.valueOf(Integer.parseInt(temp.getAttributeValue("id"))+1);
        }
        temp = new Element("categorie");
        temp.setAttribute("nom", nomCat);
        temp.setAttribute("id", nb);
        racine.addContent(temp);
        Enregistre("Categorie");
        return true;
    }
    
    
    public boolean addItem(String cat, String[] donnee){
        Ouverture("Categorie"); 
        Element temp = null;
           
        List element = racine.getChildren("categorie");
                
        for (int i = 0; i < element.size(); i++) {
            temp = (Element) element.get(i);
            if(temp.getAttributeValue("id").equals(cat)){
                break;
            }
        }
        
        String id=cat+(temp.getChildren().size()+1);
        
        Element nouveau = new Element("item");
        nouveau.setAttribute("id", id);
        nouveau.setAttribute("nom", donnee[0]);
        nouveau.setAttribute("reference", donnee[1]);
        nouveau.setAttribute("garantie", donnee[2]);
        nouveau.setAttribute("lieudachat", donnee[3]);
        DateNumero date=new DateNumero(Integer.parseInt(donnee[4]),Integer.parseInt(donnee[5]),Integer.parseInt(donnee[6]));
        nouveau.setAttribute("dateachat", date.getDatePropre());
        temp.addContent(nouveau);
        
        Enregistre("Categorie");
        return true;
    }
    /**
     * Fonction permettant de récupérer les items d'une categorie.
     * 
     * @author Damien Henry
     * 
     * @return {@code List<String[]>} liste contenant les categories
     */
    public List<String[]> getItem(String[] cat) {
        List<String[]> retour = new ArrayList<String[]>();

        Ouverture("Categorie");

        List element = racine.getChildren("categorie");
        Element temp;

        for (int i = 0; i < element.size(); ++i) {
            temp = (Element) element.get(i);
            if (temp.getAttributeValue("id").equals(cat[0])) {
                List ite = temp.getChildren();
                for (int j = 0; j < ite.size(); ++j) {
                    Element tmp = (Element) ite.get(j);
                    String[] donnee = new String[6];
                    donnee[0] = tmp.getAttributeValue("id"); 
                    donnee[1] = tmp.getAttributeValue("nomitem"); 
                    donnee[2] = tmp.getAttributeValue("reference");
                    donnee[3] = tmp.getAttributeValue("garantie");
                    donnee[4] = tmp.getAttributeValue("lieudachat");
                    donnee[5] = tmp.getAttributeValue("dateachat");
                    
                    retour.add(donnee);
                }
            }

        }


        return retour;
    }

    /**
     * Fonction permettant de récupérer les categories.
     * 
     * @author Jessy Bonnotte
     * 
     * @return {@code List<String[]>} liste contenant les categories
     */
    public List<String[]> getCategorie(){
        Ouverture("Categorie");
        List<String[]> retour = new ArrayList<String[]>();
        
        List element = racine.getChildren("categorie");
        Element temp;
        
        for (int i = 0; i < element.size(); i++) {
            temp = (Element) element.get(i);
            String[] tmp = new String[2];
            tmp[0] = temp.getAttributeValue("id");
            tmp[1] = temp.getAttributeValue("nom");
            retour.add(tmp);
        }
        return retour;
    }
}
